/**
 * 
 */
package com.gr.staffpm.notes.activity.service;

import java.util.Date;
import java.util.List;

import com.gr.staffpm.datatypes.Activities;
import com.gr.staffpm.datatypes.Activity;
import com.gr.staffpm.datatypes.Task;
import com.gr.staffpm.datatypes.User;
import com.gr.staffpm.notes.activity.ActivityMessage;


/**
 * @author Graham Rhodes 21 Feb 2011 00:24:56
 */
public interface IActivityDaoService {

    /**
     * Gets the 5 most recent activities within the last 7 days for the specified user.
     * 
     * @param user
     * @return
     */
    List<Activity> getRecentActivityForUser(User user);

    /**
     * Gets the amount of new activities for the specified user.
     * 
     * @param user
     * @return
     */
    int getNewActivityCount(User user);

    /**
     * @return
     */
    Activities getNewCommentActivityType();

    /**
     * @param newCommentActivityType
     * @param user
     * @param msg
     * @param currentUser
     */
    void addActivity(Activities activityType, User notified, ActivityMessage msg, User creator);

    void updateActivity(Activity activity);

    /**
     * @param currentUser
     * @return
     */
    List<Activity> getActivityForUserAndDate(User currentUser, Date dateOfActivity);

    /**
     * @param task
     * @param currentUser
     */
    void notifyAssigneeOfComment(Task task, User currentUser);

    /**
     * @param task
     * @param currentUser
     */
    void notifyAssigneeOfAcceptance(Task task, User currentUser);

    /**
     * @param task
     * @param currentUser
     */
    void notifyAssigneeOfRejection(Task task, User currentUser);

    /**
     * @param task
     * @param currentUser
     */
    void notifyAssigneeOfSubmission(Task task, User currentUser);

    /**
     * @param notified
     * @param currentUser
     */
    void notifyUserOfFeedback(User notified, User currentUser);

}
